package com.shrct.businessprocess.customerservice;

import com.shrct.businessprocess.customerservice.IHasServiceRelatedProducts;
import com.shrct.businessprocess.customerservice.RCRoutineServiceItem;
import com.shrct.businessprocess.customerservice.RCRoutineServicePlanItem;
import com.shrct.businessprocess.customerservice.RCRoutineServicePlanStatus;
import com.shrct.businessprocess.customerservice.RCRoutineServiceWorkItem;
import com.shrct.businessprocess.customerservice.impl.RCRoutineServicePlanImpl;
import com.shrct.businessprocess.customerservice.proxy.RCRoutineServicePlanProxy;
import com.shrct.businessprocess.organization.RCEnterprise;
import com.shrct.businessprocess.product.RCLogicProduct;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCRoutineServicePlanImpl.class)
public interface RCRoutineServicePlan extends IModelObject, IHasServiceRelatedProducts {
  public abstract String getLocation();
  
  public abstract RCRoutineServicePlan setLocation(final String location);
  
  public abstract RCEnterprise getCustomer();
  
  public abstract RCRoutineServicePlan setCustomer(final RCEnterprise customer);
  
  public abstract Date getPlanDate();
  
  public abstract RCRoutineServicePlan setPlanDate(final Date planDate);
  
  public abstract RCRoutineServicePlanStatus getStatus();
  
  public abstract RCRoutineServicePlan setStatus(final RCRoutineServicePlanStatus status);
  
  public abstract Collection<RCRoutineServicePlanItem> getPlanItems();
  
  public abstract RCRoutineServicePlanItem createAndAddtoPlanItems();
  
  public abstract RCRoutineServicePlanItem createAndAddtoPlanItems(final Procedure1<RCRoutineServicePlanItem> updater);
  
  public abstract RCRoutineServicePlan removeFromPlanItems(final RCRoutineServicePlanItem rCRoutineServicePlanItem);
  
  public abstract RCRoutineServicePlan removeAllPlanItems();
  
  public abstract RCRoutineServiceWorkItem getWorkItem();
  
  public abstract RCRoutineServicePlan setWorkItem(final RCRoutineServiceWorkItem workItem);
  
  public abstract Iterable<RCLogicProduct> getRelatedProducts();
  
  public abstract RCRoutineServiceWorkItem assign(final Procedure1<? super RCRoutineServiceWorkItem> preInit);
  
  public abstract void addPlanItem(final RCRoutineServiceItem remender);
  
  public abstract void removePlanItem(final RCRoutineServiceItem remender);
  
  public abstract void finished();
  
  public abstract void cancelWorkItem();
  
  public abstract RCRoutineServicePlanProxy toProxy();
}
